import { dbService } from './dbService';

// 配置项的默认值
const DEFAULT_CONFIG = {
  scheduler: {
    enabled: false,      // 定时器是否启用，默认不启用
    cacheSettings: true  // 是否缓存定时器设置，默认缓存
  }
};

class ConfigService {
  constructor() {
    this.config = { ...DEFAULT_CONFIG };
    this.isInitialized = false;
    
    // 绑定方法
    this.initialize = this.initialize.bind(this);
    this.getConfig = this.getConfig.bind(this);
    this.setConfig = this.setConfig.bind(this);
    this.saveConfig = this.saveConfig.bind(this);
  }

  // 初始化服务
  async initialize() {
    if (this.isInitialized) return;
    
    try {
      // 从IndexedDB加载配置数据
      const configData = await dbService.get(dbService.getStoreNames().USER, 'appConfig');
      if (configData && configData.data) {
        // 合并默认配置和存储的配置
        this.config = {
          ...DEFAULT_CONFIG,
          ...configData.data
        };
        console.log('从IndexedDB加载配置数据成功');
      } else {
        this.config = { ...DEFAULT_CONFIG };
        console.log('未找到配置数据，使用默认配置');
        // 保存默认配置到数据库
        await this.saveConfig();
      }
      
      this.isInitialized = true;
    } catch (error) {
      console.error('初始化配置服务失败:', error);
    }
  }

  // 获取配置
  getConfig(path = null) {
    if (!this.isInitialized) {
      console.warn('配置服务尚未初始化，返回默认配置');
      return path ? this._getNestedProperty(DEFAULT_CONFIG, path) : { ...DEFAULT_CONFIG };
    }
    
    if (!path) {
      return { ...this.config };
    }
    
    return this._getNestedProperty(this.config, path);
  }

  // 设置配置
  async setConfig(path, value) {
    if (!this.isInitialized) {
      await this.initialize();
    }
    
    this._setNestedProperty(this.config, path, value);
    await this.saveConfig();
    return true;
  }

  // 保存配置到IndexedDB
  async saveConfig() {
    try {
      await dbService.set(dbService.getStoreNames().USER, {
        id: 'appConfig',
        data: this.config
      });
      console.log('配置数据已保存到IndexedDB');
      return true;
    } catch (error) {
      console.error('保存配置数据失败:', error);
      throw error;
    }
  }

  // 获取嵌套属性
  _getNestedProperty(obj, path) {
    const keys = path.split('.');
    let result = obj;
    
    for (const key of keys) {
      if (result === undefined || result === null) {
        return undefined;
      }
      result = result[key];
    }
    
    return result;
  }

  // 设置嵌套属性
  _setNestedProperty(obj, path, value) {
    const keys = path.split('.');
    let current = obj;
    
    for (let i = 0; i < keys.length - 1; i++) {
      const key = keys[i];
      if (!(key in current)) {
        current[key] = {};
      }
      current = current[key];
    }
    
    current[keys[keys.length - 1]] = value;
    return obj;
  }
}

// 创建单例实例
const configService = new ConfigService();

// 导出服务实例
export default configService;